package com.spgf.model.services;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

import com.archtecture.model.exceptions.NegocioException;
import com.spgf.model.entities.CategoriaModel;
import com.spgf.model.entities.LancamentoModel;
import com.spgf.model.enums.FormaPagamento;
import com.spgf.model.rn.LancamentoRN;

public class InterceptaSMS extends BroadcastReceiver {

	@SuppressLint("SimpleDateFormat")
	@Override
	public void onReceive(Context context, Intent intent) {

		Log.i("InterceptaSMS", "Entrou");

		Bundle extras = intent.getExtras();

		if (extras != null) {

			Object[] smsextras = (Object[]) extras.get("pdus");

			SmsMessage smsmsg = SmsMessage.createFromPdu((byte[]) smsextras[0]);

			String lNumeroTelefone = smsmsg.getOriginatingAddress();

			if (lNumeroTelefone.equals("25001")) {

				String lCorpoMensagem = smsmsg.getMessageBody().toString();

				if (lCorpoMensagem.startsWith("ITAU DEBITO:")) {

					Integer lLimiteData = lCorpoMensagem.indexOf(" COMPRA APROVADA ") + 17;
					String lData = lCorpoMensagem.substring(lLimiteData, lLimiteData + 5);
					Log.i("InterceptaSMS", "Data: " + lData);

					Integer lLimiteValor = lCorpoMensagem.indexOf(" R$ ") + 4;
					Integer lLimiteSupValor = lCorpoMensagem.indexOf(" Local: ");
					String lValor = lCorpoMensagem.substring(lLimiteValor, lLimiteSupValor);
					Log.i("InterceptaSMS", "Valor: " + lValor);

					Integer lLimiteInfLocal = lCorpoMensagem.indexOf(" Local: ") + 8;
					Integer lLimiteSupLocal = lCorpoMensagem.indexOf(" Consulte tambem pelo celular");
					String lLocal = lCorpoMensagem.substring(lLimiteInfLocal, lLimiteSupLocal);
					Log.i("InterceptaSMS", "Local: " + lLocal);

					// =============================

					LancamentoModel lModel = new LancamentoModel();
					lModel.setFormaPagamento(FormaPagamento.DEBITO_EM_CONTA);
					lModel.setObservacao(lLocal);
					lModel.setValor(Double.valueOf(lValor.replace(",", ".")));

					lModel.setCategoria(new CategoriaModel(27));

					try {
						lModel.setData(new SimpleDateFormat("dd/MM/yyyy").parse(lData + "/2014"));
					} catch (ParseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

					try {
						new LancamentoRN(context).inserir(lModel);
					} catch (NegocioException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}
			}
		}
	}
}
